このページは、2008 年 2 月 21 日に最後に変更されました。

eDocs ホーム > BEA AquaLogic Data Services Platform 3.0/3.2 ドキュメント > ALDSP 3.2 新機能のドキュメント

暗号ベースのデータ編集の例

このトピックでは、一般的な操作を実行するときの暗号ベースのデータ編集の動作を示す例を紹介します。

データ サービス関数の例

この章の例では、以下のデータ サービスを使用します。

エンティティ データ サービス CustomerDS - データ サービスは、以下のスキーマに準拠する顧客に関する情報を返します。

CUSTOMER
   SSN: xs:string
   FIRST NAME: xs:string
   LAST NAME: xs:string
   CUSTOMER_SINCE: xs:date

この情報は、以下のようなデータを返すパブリック読み取り関数「getCUSTOMERS()」によって表示されます。

<CUSTOMER>
   <SSN>123-45-6789</SSN>
   <FIRST_NAME>John</FIRST_NAME>
   <LAST_NAME>Smith</LAST_NAME>
   <CUSTOMER_SINCE>2007-10-10</CUSTOMER_SINCE>
</CUSTOMER>

エンティティ データ サービス OrderDS - このデータ サービスは、以下のスキーマに準拠する顧客注文に関する情報を返します。

ORDER
   ORDER_ID: xs:integer
   CUSTOMER_SSN: xs:string
   DATE: xs:date
   STATUS: xs:string

この情報は、以下のようなデータを返すパブリック読み取り関数「getORDERS()」によって表示されます。

<ORDER>
   <ORDER_ID>1000</ORDER_ID >
   <CUSTOMER_SSN>123-45-6789</CUSTOMER_SSN>
   <DATE>2007-10-10</DATE>
   <STATUS>CLOSED</STATUS>
</ORDER>
<ORDER>
   <ORDER_ID>2000</ORDER_ID >
   <CUSTOMER_SSN>123-45-6789</CUSTOMER_SSN>
   <DATE>2007-11-11</DATE>
   <STATUS>OPEN</STATUS>
</ORDER>

結果の例

暗号されたフィールドの射影

データ サービス CustomerDS の SSN フィールドに対して暗号ベースのデータ編集がコンフィグレーションされている場合、getCUSTOMERS() 関数を直接呼び出すと、以下の結果が返されます。

<CUSTOMER>
   <SSN>sjdlkggdlaklakskjfgk</SSN>
   <FIRST_NAME>John</FIRST_NAME>
   <LAST_NAME>Smith</LAST_NAME>
   <CUSTOMER_SINCE>2007-10-10</CUSTOMER_SINCE>
</CUSTOMER>

SSN フィールドの値は暗号化され、それぞれ異なる SSN に対してユニークです。

暗号化されたフィールドに対する述語

データ サービス CustomerDS の SSN フィールドに対して暗号ベースのデータ編集がコンフィグレーションされている場合、以下の XQuery は () を返します。

for $x in p:getCUSTOMERS()
where $x/SSN eq "123-45-6789"
return $x

これは、暗号化されていない値と SSN の暗号化された値とを一致させようとするためです。

暗号化されたフィールドでの外部結合

外部結合を実行する次の XQuery クエリを見てみましょう。

for $x in p:getCUSTOMERS()
return
<CUSTOMER>
   <SSN>{fn:data($x/SSN)}</SSN>
   {
   for $y in q:getORDERS()
   where $x/SSN eq $y/CUSTOMER_SSN
   return
      <ORDER_ID>{fn:data($y/ORDER_ID)}</ORDER_ID>
   }
</CUSTOMER>

CustomerDS の SSN フィールドと OrderDS の CUSTOMER_SSN フィールドに対して暗号ベースのデータ編集がコンフィグレーションされている場合、このクエリは以下の結果を返します。

<CUSTOMER>
   <SSN>sjdlkggdlaklakskjfgk</SSN>
   <ORDER_ID>1000</ORDER_ID >
   <ORDER_ID>2000</ORDER_ID >
</CUSTOMER>

外部結合は、暗号化が設定されていないかのように実行されます。また、結果内の保護された要素の値は暗号化されます。

暗号化されたフィールドと暗号化されていないフィールドの結合

暗号ベースのデータ編集がデータ サービス CustomerDS の SSN フィールドに対してはコンフィグレーションされ、データ サービス OrderDS ではコンフィグレーションされていない場合、暗号化されたフィールドと暗号化されていないフィールドを結合する以下の XQuery クエリを使用します。

for $x in p:getCUSTOMERS()
return
<CUSTOMER>
   <SSN>
      {fn:data($x/SSN)}
   </SSN>
   {
   for $y in q:getORDERS()
   where $x/SSN eq $y/CUSTOMER_SSN
   return
      <ORDER_ID>
         {fn:data($y/ORDER_ID)}
      </ORDER_ID>
   }
</CUSTOMER>

このクエリは () を返します。

SSN の暗号化された値が CUSTOMER_SSN の暗号化されていない値と一致しないため、この外部結合は結果を返すことができません。

暗号化されたフィールドによるグループ化

GROUP BY 句が含まれている以下の SQL クエリを考えてみましょう。

SELECT CUSTOMER_SSN, COUNT(*y)
FROM ORDERS
GROUP BY CUSTOMER_SSN

暗号ベースのデータ編集がデータ サービス OrderDS の CUSTOMER_SSN フィールドに対してコンフィグレーションされ、getOrders() 関数が SQL テーブル ORDERS にマップされる場合、この SQL クエリは以下の結果を返します。

(sjdlkggdlaklakskjfgk, 2)

GROUP BY 句は、暗号化が設定されていないかのように実行されます。また、結果内の保護されたカラムの値は暗号化されます。

関連項目

コンセプト
ガイド
参考
2008 年 4 月 10 に 11:47 に Confluence によって作成されたドキュメント